﻿#define _CRT_SECURE_NO_WARNINGS  1
#pragma warning(disable:6031)
#include<stdio.h>





//int main()
//{
//	int a = 10000;
//	FILE* pf = fopen("test.txt", "wb");
//	fwrite(&a, 4, 1, pf);//以二进制的形式写到文件中
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//int main()//fputc
//{
//	//1、打开文件
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//
//	//2、写文件
//	//int fputc ( int character, FILE * stream );	
//	//fputc('a', pf); 
//	//fputc('b', pf);  
//	//fputc('c', pf); 
//
//	char ch = 0;
//	for (ch = 'a'; ch <= 'z'; ch++)
//	{
//		fputc(ch, pf);//每次调用光标都会向后走一步
//	}
//
//
//	//3、关闭文件
//	fclose(pf);
//	pf = NULL;//置为空指针
//
//	return 0;
//}



//int main()//fgetc
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读文件
//	//int ch = fgetc(pf);
//	//printf("%c\n", ch);
//
//	//ch = fgetc(pf);
//	//printf("%c\n", ch);
//
//	//ch = fgetc(pf);
//	//printf("%c\n", ch);
//
//	//ch = fgetc(pf);
//	//printf("%c\n", ch);
//
//	int ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		printf("%c ", ch);
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//int main()//fputs
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "w");//将原文件内容清空后写入
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	fputs("hello world\n", pf);
//	fputs("hello bit", pf);
//
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//int main()//fgets
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读文件
//	//char arr[20] = "xxxxxxxxxxxxxxxx";
//	//fgets(arr, 10, pf);
//
//
//	char arr[20] = { 0 };
//	while (fgets(arr, 20, pf) != NULL)
//	{
//		printf("%s", arr);
//	}
//	
//
//
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//
//int main()
//{
//	//1、打开文件data.txt
//	FILE* pf = fopen("data.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//2、创建文件data_copy.txt
//	FILE* pf1 = fopen("data_copy.txt", "w");
//	if (pf1 == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	int ch = 0;
//	char arr[200] = { 0 };
//	while ((ch = fgets(arr, 200, pf)) != NULL)
//	{
//		fputs(ch, pf1);
//	}
//
//
//
//
//	//关闭两个文件
//	fclose(pf);
//	pf = NULL;
//
//	fclose(pf1);
//	pf1 = NULL;
//	
//	return 0;
//}


//struct S
//{
//	char name[20];
//	int age;
//	float score;
//
//};
//int main()
//{
//	struct S s = { "张三",20,60.5f };
//
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("open");
//		return 1;
//	}
//
//	fprintf(pf, "%s %d %f", s.name, s.age, s.score);
//
//	fclose(pf);
//	pf = NULL;
//
//
//	return 0;
//}



//struct S
//{
//	char name[20];
//	int age;
//	float score;
//
//};
//int main()
//{
//	struct S s = {0};
//
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读文件
//	//这里name在结构体中是数组不用取地址，但是年龄和分数需要
//	fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));
//	//打印
//	printf("%s %d %f", s.name, s.age, s.score);
//
//
//	fclose(pf);
//	pf = NULL;
//
//
//	return 0;
//}


//int main()
//{
//	fputc('a', stdout);
//	return 0;
//}


//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	char buf[200] = { 0 };
//	struct S s = { "张三",20,60.5f };
//	sprintf(buf, "%s %d %f", s.name, s.age, s.score);
//
//	printf("1、以字符串的形式：%s\n", buf);
//
//	struct S t = { 0 };
//	sscanf(buf, "%s %d %f", t.name, &(t.age), &(t.score));
//	printf("2、按照格式打印：%s %d %f", t.name, t.age, t.score);
//
//	return 0;
//}


//int main()
//{
//	int arr[] = { 1,2,3,4,5 };
//	FILE* pf = fopen("test.txt", "wb");
//	if (pf == NULL)
//	{
//		perror(fopen);
//		return 1;
//	}
//
//	//写数据
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	//以二进制的形式写入
//	fwrite(arr, sizeof(arr[0]), sz, pf);
//
//	fclose(pf);
//	pf = NULL;
//
//
//
//
//
//	int cur[5] = { 0 };
//	FILE* pf1 = fopen("test.txt", "rb");
//	if (pf1 == NULL)
//	{
//		perror(fopen);
//		return 1;
//	}
//
//	fread(cur, sizeof(cur[0]), 5, pf1);
//	for (int i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	fclose(pf1);
//	pf1 = NULL;
//
//	return 0;
//}


//int main() {
//    FILE* pFile;
//    pFile = fopen("example.txt", "wb");
//    fputs("This is an apple.", pFile);
//    fseek(pFile, 9, SEEK_SET);
//    fputs(" sam", pFile);
//    fclose(pFile);
//    return 0;
//}




/* rewind example */
//#include <stdio.h>
//int main()
//{
//	int n;
//	FILE* pFile;
//	char buffer[27];
//	pFile = fopen("myfile.txt", "w+");
//	for (n = 'A'; n <= 'Z'; n++)
//		fputc(n, pFile);
//	rewind(pFile);
//	fread(buffer, 1, 26, pFile);
//	fclose(pFile);
//	buffer[26] = '\0';
//	printf(buffer);
//	return 0;
//}


//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读取
//	int ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		printf("%c\n", ch);
//	}
//
//	//判断是什么原因导致读取结束的
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束\n");
//	}
//
//	return 0;
//}



//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写
//	char ch = 0;
//	for (ch = 'a'; ch <= 'c'; ch++)
//	{
//		fputc(ch, pf);
//	}
//
//
//	//判断是什么原因导致读取结束的
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束\n");
//	}
//	else if (ferror(pf))
//	{
//		perror("fputc");
//	}
//
//
//	return 0;
//}


#include <stdio.h>
#include <windows.h>

int main()
{
	FILE* pf = fopen("test.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒-已经写数据了，打开test.txt文件，发现文件没有内容\n");
	Sleep(10000);
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）
	//注：fflush 在⾼版本的VS上不能使⽤了
	printf("再睡眠10秒-此时，再次打开test.txt文件，文件有内容了\n");
	Sleep(10000);
	fclose(pf);
	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
	pf = NULL;
	return 0;
}